package com.zoe.onelink.core.util;

import cn.hutool.core.io.resource.ResourceUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.Properties;

/**
 * <p>标题: </p>
 * <p>描述: </p>
 * <p>版权: Copyright (c) 2022</p>
 * <p>公司: 智业软件股份有限公司</p>
 *
 * @version: 1.0
 * @author: ruansheng
 * @date: 2022-09-26
 */
@Slf4j
public class OnelinkFrameworkInfoUtil {

    /**
     * 读取 OneLink 框架版本信息的 Properties 对象
     */
    private static final Properties PROP = new Properties();

    // 使用静态代码块进行 PROP 的初始化操作
    static {
        try {
            // 调用 ResourceUtil 工具类获取 OneLinkCoreBuildInfo.properties 文件的输入流并加载到 PROP 中
            PROP.load(ResourceUtil.getStream("onelink/build/OnelinkCoreBuildInfo.properties"));
        } catch (Exception e) {
            // 记录读取版本信息失败的错误日志
            log.error("[OneLinkFrm] 读取核心框架版本信息失败", e);
        }
    }

    /**
     * 获取指定 key 对应的值
     *
     * @param key - 要获取值的 key
     * @return Object - key 对应的值
     */
    public static Object getObject(String key) {
        return PROP.get(key);
    }

    /**
     * 获取指定 key 对应的值，并将其转换为字符串返回
     *
     * @param key - 要获取值的 key
     * @return String - key 对应的值
     */
    public static String getString(String key) {
        return PROP.getProperty(key);
    }

    /**
     * 获取指定 key 对应的值，若不存在则返回 defaultValue
     *
     * @param key          - 要获取值的 key
     * @param defaultValue - 默认值
     * @return String - key 对应的值
     */
    public static String getString(String key, String defaultValue) {
        return PROP.getProperty(key, defaultValue);
    }

    /**
     * 获取 PROP 对象
     *
     * @return Properties - PROP 对象
     */
    public static Properties getProp() {
        return PROP;
    }

    /**
     * 存放 key 的接口
     */
    public interface Key {
        /**
         * OneLink 核心版本号的 key
         */
        String ONELINK_CORE_VERSION = "onelink.core.version";
        /**
         * OneLink 核心构建时间的 key
         */
        String ONELINK_CORE_BUILD_TIME = "onelink.core.buildTime";
    }

}